___________________________________________________
     
                Introduzione a TrackMeDown99 v1.0 by  -NeuRaL_NoiSE
                ___________________________________________________


Salve a tutti!
Allora....cominciamo dalle caratteristiche salienti del programma, poi vi spieghero' in 
dettaglio ogni cosa !

Il programma e' un tipico CRACKME, cioe' un esercizio solo per i crackers, che non svolge 
nessuna funzione particolare, e si distingue dai programmi normali perche' e' utile 
praticamente solo per il fatto che contiene uno schema di protezione, che il cracker deve 
cercare di analizzare, comprendere, e quindi distruggere.
Solitamente, dei crackme viene presentato solo il risultato finale, il .EXE per intenderci, per 
ovvi motivi...ciononostante, io ho deciso di pubblicare anche il sorgente, perche' mi sono 
spesso ritrovato nella situazione del cracker che, pur avendo disabilitato la protezione di un 
crackme, desiderava ardentemente possedere il codice (non il disasm, troppo ingarbugliato per 
capire veramente TUTTO) del programma....con il codice (magari commentato), si puo' avere una 
completa visione di insieme e (perche' no!) si possono imparare moltissime cose, dalle basi 
della programmazione fino a cose che probabilmente vi interesseranno solo se avete deciso di 
intraprendere la carriera del cracker, come il modo in cui puo' essere generato un numero 
seriale, trucchetti vari per nascondere dalla memoria le tracce di variabili elaborate in 
precedenza, ecc...
Per questo motivo, ecco a voi il TrackMeDown99 completo di codice sorgente :))
Questa e' la prima volta che scrivo un crackme destinato praticamente SOLO al pubblico (con 
piu' commenti che istruzioni, per intenderci ;), e quindi spero che mi perdonerete per lo stile 
forse disordinato e poco chiaro che ho di programmare...sappiate che comunque ho fatto del mio 
meglio per organizzare il codice in modo lineare :)
Capisco che molti di voi vorranno provare prima la "challenge" di crackarlo da soli (anche se a 
questi devo dire che e' ESTREMAMENTE facile da sproteggere, in fondo credo che sia meglio 
seguire una scala di difficolta', e questo e' il primo crackme-tutorial che scrivo :)
Percio', se avete voglia di provarlo, vi avverto: FERMATEVI QUI!! NON LEGGETE OLTRE, PERCHE' 
NELLE PROSSIME RIGHE COMINCIERO' A SPIEGARE IN DETTAGLIO LO SCHEMA DI PROTEZIONE E LE 
CARATTERISTICHE INTERNE DEL PROGRAMMA!
cracker avvisato, mezzo salvato.....

SORGENTI

                                        *********


Siete ancora qui?? ok, allora procediamo!

____________________________________________________________

DESCRIZIONE DETTAGLIATA DELLE CARATTERISTICHE E DELLO SCHEMA
____________________________________________________________


Partiamo dalle caratteristiche....

***


* IL PROGRAMMA E' SCRITTO INTERAMENTE IN ASSEMBLY PER WIN32

* IL TIPO DI PROTEZIONE E' UNA COMBINAZIONE TRA NOME E REGISTRATION KEY

* IL PROGRAMMA CONTIENE UNA HARDCODED PASSWORD CHE E' RILEVABILE QUANDO LO SI DISASSEMBLA, E
  CHE SE INSERITA COME "NOME" GENERA UN MESSAGGIO DIVERSO :)

* A DIFFERENZA DI ALCUNI SCHEMI DI PROTEZIONE COMMERCIALI SCRITTI DA DEFICIENTI (VEDI WINZIP ET
  SIMILIA), DOVE LA PASSWORD E' TRANQUILLAMENTE VISUALIZZABILE IN EDI O ESI AL MOMENTO DEL REPZ
  CMPSB, QUI AVRETE BISOGNO COMUNQUE DI UN PEZZETTO DI CARTA PER SEGNARVELA, INSOMMA NIENTE
  PAPPA PRONTA NEI REGISTRI :D

* LA PAPPA PRONTA, E' DA DIRLO, LA AVRETE CON LA HARDCODED PASSWORD, CHE VI APPARIRA' IN BELLA
  MOSTRA MENTRE TRACCIATE. CI SONO DUE MOTIVI PER CUI HO DECISO DI CONSERVARE QUESTA
  CARATTERISTICA: UNO, ILLUDE I NEWBIES (MA PROPRIO NEWBIES NEWBIES:) CHE LO SCHEMA FUNZIONI
  TUTTO COSI', IN STILE "MINESTRINA SERVITA NEL REGISTRO" PER INTENDERCI :D
  E DUE, PERCHE' AVEVO GIA' SCRITTO LA ROUTINE E MI ROMPEVO DI MODIFICARLA (HEHEH:))

* IL TUTTO E' MOOOLTO SEMPLICE, ED IL GROSSO LO LASCIO AI COMMENTI NEL .ASM

* LE PARTI INERENTI LA CREAZIONE DELLA FINESTRA E DELLE ROUTINE DI WINMAIN, DI GESTIONE MENU E
  DI GESTIONE DELLA DIALOG BOX LE HO PRESE DIRETTAMENTE DAI TUTORIALS DI ICZELION, 
  MODIFICANDOLE SOLO UN PO'. PER FAR PARTIRE IL PROGRAMMA AVRETE BISOGNO QUINDI DEL FILE   
  WINDOWS.INC DA LUI USATO (LO TROVATE ANCHE IN TMD99.ZIP). VI CONSIGLIO VIVAMENTE DI LEGGERE 
  LE TRADUZIONI IN ITALIANO DEI SUOI TUTORIALS (FATTE DA ME :p) SE SIETE PROPRIO A DIGIUNO DI 
  ASSEMBLY PER WIN32. LE TROVATE SU         http://ringz3r0.cjb.net

* LE RISORSE (I MENU E IL DIALOG BOX) LE HO CREATE CON IL BORLAND RESOURCE WORKSHOP.
  POTETE DARCI UN'OCCHIATA EDITANDO IL FILE TMD99.RES

* IL PROGRAMMA E' STATO SCRITTO INTERAMENTE USANDO ULTRAEDIT 32 (UN PIZZICO DI PUBBLICITA'
  OCCULTA PER QUESTO GRANDE EDITOR CI STA SEMPRE BENE ;)

* IL COMPILATORE CHE HO UTILIZZATO PER QUESTO PROGRAMMA E' MASM32 v2

* QUESTO SOFTWARE E' LIBERAMENTE DISTRIBUIBILE E MODIFICABILE, SEMPRE CHE SI RICORDINO DUE
  CONCETTI BASE:
   1 - SE LO MODIFICATE, COMUNICATEMELO TRAMITE EMAIL (LA TROVATE ALLA FINE DEL FILE),
       MAGARI INCLUDENDO NELLA STESSA IL FILE DA VOI MODIFICATO
   2 - RICORDATEVI, SEMPRE E COMUNQUE, CHE QUESTO PROGRAMMA E' STATO DEDICATO A RINGZ3R0, IL
       MIGLIOR SITO DI CRACKING E REVERSE ENGINEERING IN ITALIA! TUTTO QUELLO CHE HO FATTO LO
       HO FATTO SOLO PER PASSIONE, E DOVRESTE CERCARE DI MANTENERE QUESTO PRESUPPOSTO (NO 
       LUCRO INSOMMA :) NEL MOMENTO IN CUI ANDATE AD EDITARLO PER MODIFICARLO.

***


Lo schema, invece, funziona cosi'....



1  - prendi carattere

2  - chiama ROUTINE DI CONTROLLO CARATTERE
          * il carattere e' una lettera minuscola?
             * se si, rendila maiuscola e salta al passo 3
             * se no, allora e' una maiuscola?
             * se si, salta al passo 3
             * se no, allora e' un numero ?
             * se si, salta al passo 3
             * se no, e' per forza un carattere invalido. setta la flag "carattere invalido" e 
               continua

3  - controlla la flag carattere invalido
          * il carattere e' valido ? 
            * se no, evita di elaborarlo, avanza di carattere, azzera la flag "carattere 
              invalido" e vai al passo 1
            * se si, continua

4  - xora carattere con la sua posizione nella stringa : (ad es. "NEURAL" e' uguale a  N xor 1,
     E xor 2, U xor 3 ecc....)
          * il carattere inserito e' uguale a quello xorato ?
            * si, vai al passo 5
            * no, setta la flag "caratteri diversi" e vai al passo 5

5  - controlla se abbiamo superato la posizione 10 nella stringa
            * si, avanza di 2 in 2 per confondere un po' le idee del cracker. Vai al passo 6
            * no, continua

6  - controlla la flag "caratteri diversi"
            * e' uno ? i caratteri sono diversi, vai al passo 9
            * zero ? i caratteri sono uguali...continua con il passo 7

7  - abbiamo finito i caratteri ?
            * no, vai al passo 1
            * si? vai al passo 8

8  - il carattere finale e' un byte 00 ANCHE nel seriale inserito ? o ce lo ritroviamo solo
     come carattere finale corretto, mentre l'utente ha inserito un seriale piu' lungo del
     dovuto ?
            * no, il seriale inserito continua quando dovrebbe finire...vai al punto 9
            * SI! le stringhe contengono gli stessi caratteri, e finiscono per di piu' NELLO
              STESSO IDENTICO PUNTO! Abbiamo inserito il seriale corretto, lunghezza esatta,
              caratteri esatti........vai al punto 10!!

9  - dici al cracker che e' un fallito, esci dal loop e torna al dialog box ;)

10 - dici al cracker che e' un wizard, esci dal loop e torna alla prima schermata!

***

Lo schema quindi e' molto semplice....il cuore della generazione delle key valide sta nel fatto 
che ogni carattere valido (cioe' un numero o una lettera dell'alfabeto) del nome inserito viene 
xorato con la sua posizione nella stringa...e tale posizione avanza di due in due una volta 
superata la decima...facile huh ??
Se comunque vi sentite un po' incasinati, vi rimando ai commenti nel codice - niente panico, 
ogni singola riga e' commentata, una volta raggiunta la zona 'importante' :)
basta rileggere piu' volte e lo schema vi sara' chiarissimo!

Allora, siamo arrivati alla fine.....i saluti e i ringraziamenti li ho riservati per il box 
"about" del programma, quindi direi che e' proprio tutto!
Aspettatevi, per le prossime "releases", qualche protezione piu' complessa, un metodo di 
generazione dei seriali piu' ingarbugliato, o magari un keyfile criptato, o forse un po' di 
sano Self Modifying Code per togliere di mezzo definitivamente i maniaci del W32Dasm, lasciando 
spazio ai virgulti del SoftICE :D...devo solo trovare il tempo di farlo, ma verra' il momento, 
niente paura!! :))

se trovate utile questo programma per capirci un po' di piu' riguardo all'assembly o al 
cracking, mi raccomando mandatemi un'email a NEURAL_NOISE@HOTMAIL.COM
se avete commenti, aggiunte, denuncie, minaccie, rimpianti, critiche costruttive, polemiche 
gratuite e mortificanti, ecc. il mio indirizzo sta sempre li'...se utilizzate parti del codice 
per un vostro programma, non vi chiedo soldi, ma TANTI SOLDI!! no dai, scherzo :)  basta che 
magari mi salutiate in un angolino dell'about :D



PER COMPILARE IL CODICE, USATE IL FILE COMPILA.BAT CHE TROVATE INCLUSO, FACENDO ATTENZIONE A
CAMBIARE LE PATH PER MASM, LE LIBS ECC.!

ULTIMA NOTA: GUARDATE IL CODICE *SENZA* IL WORDWRAPPING, O NON CI CAPIRETE NIENTE!! :)



a presto,

-NeuRaL_NoiSE 1999